package com.om.calculator;

import static org.junit.Assert.assertEquals;

import org.junit.Before;
import org.junit.Test;

public class RpnCalculatorTest {
    private RpnCalculator calculator;

    @Before
    public void initializeCalculator() {
        calculator = new RpnCalculator();
    }
    
    private void validateResultIs(int expectedValue) {
        int sum = calculator.top();
        assertEquals(expectedValue, sum);
    }
    
    @Test
    public void canSubtract() {
       calculator.enter(4);
       calculator.enter(-21);
       calculator.minus();
       validateResultIs(4 - -21);
    }
    
    @Test
    public void canAddEmpty() {
        calculator.add();
        validateResultIs(0);
    }

    @Test
    public void factorialOf0is1() {
        calculator.factorial();
        validateResultIs(1);
    }
    
    @Test
    public void factorialOfNIsCalculatedCorrectly() {
        calculator.enter(5);
        calculator.factorial();
        validateResultIs(120);
    }
    
    @Test
    public void threeNumberAddingOnlyLastTwo() {
        calculator.enter(3);
        calculator.enter(4);
        calculator.enter(4);
        calculator.add();
        validateResultIs(8);
    }

    @Test
    public void canAddTwoNumbers() {
        calculator.enter(40);
        calculator.enter(-13);
        calculator.add();
        validateResultIs(27);
    }
}
